univerzalny interfejs voci db

Otázka od: Kalus Jozef Ing.

25. 9. 2002 15:13

nazdar,

riesim takyto problem:

robim soft nad db FB/IB, ale chcel by som ho prisposobit tak aby mi mohol
ist aj voci inej db, napriklad MySQL, MS SQL, Oracle, Progress atd. Viem, ze
nic univerzalne nenajdem preto by som si chcel urobit interface, ktory by
som podla potreby doprogramoval o podporu dalseho typu db, t.j. ze by som
jednoducho zavolal funkcie na zapis alebo insert a len tie volal v celom
programe s tym ze v tychto funkciach by bolo vetvenie pre jednotlive typy
db.

Nema niekto s takymto niecim skusenosti ? Nechcem sa zamotat v bludnom kruhu
a nerad by som isiel nejakou zlou cestou.

Stacilo by mi coho sa mam vyvarovat a co uprednostnit, pripadne doporucenia.

Dik za kazde info, velmi mi to pomoze.

joka

Odpovedá: Jan Sebelík

25. 9. 2002 22:45

> Odesílatel: Kalus Jozef Ing. <jozef.kalus@spordat.sk>
> robim soft nad db FB/IB, ale chcel by som ho prisposobit tak aby mi mohol
> ist aj voci inej db, napriklad MySQL, MS SQL, Oracle, Progress atd.

Kvuli tomu vzniklo BDE.
V zasade se da rici, ze BDE tyto pozadavky splnuje.

Jenze me hned nekdo opravi: kazda databaze je trochu jina, kazda vyzaduje
trochu jine techniky prace s daty atd. Takze s BDE to sice asi bude fungovat,
ale nebude to idealni fungovani.

Mozne reseni je pouzit
TClientDataSet + TDataSetProvider + NejakyDataset + NejakaConnection.

Pri prechodu na jinou databazi je sice zpravidla treba zmenit tu Connection a
ten DataSet, ale 99% prace s programovanim uzivatelskeho rozhrani budes psat na
tim TClientDataSet, takze to menit nebudes muset.

Taky by slo DataSetProvider + DataSet + Connection umistit do COM-objektu a mas
tady vicevrstvou aplikaci. Klient (TClientDataSet), se kterym je nejvice prace,
vubec nemusi tusit, nad jakou databazi to bezi.

Honza
=========================================
= HAES - RNDr. Jan Sebelik
= http://www.haes.cz
= Skolici a konzultacni stredisko pro Delphi a Win32
= Vojtiskova 206
= 507 81 Lazne Belohrad
= tel. 493 792 931 (mobil 776 347735)
=========================================

Odpovedá: Petr Fejfar

26. 9. 2002 10:28

From: "Kalus Jozef Ing." <jozef.kalus@spordat.sk>

> Nema niekto s takymto niecim skusenosti ?
> Nechcem sa zamotat v bludnom kruhu
> a nerad by som isiel nejakou zlou cestou.

Ja jsem se v nekolika projektech snazil o neco podobneho a dodnes se snazim
takovy
interface pouzivat, ale jde to cim dal tim vic
ztuha  

Bylo to navrzeno pro aplikace serverovskeho typu:

Kazda DB tabulka byla potomkem tridy tSQLTable
a ta mela jako atributy vytazena vsechna pole z DB.
Vlastni metody byly rodeleny napr. na

     public SearchForXXX(...)
a protected _BuildSearchForXXXCommand(...)

Takze jakakoli zmena na urovni DB se udehrala v metodach teto tridy a zbytek
aplikace o ni v podstate nevedel.

Pro vlastni DB pristup jsme zapouzdrili konkretni konektivitu do vlastnich
trid tSQLDatabase a tSQLQuery (nemaji nic spolecneho s TDataset), ktere
poskytuji jakysi min. interface spolecny ruznym konektivitam.
Ridi se to podminenym prekladem a pouzivali jsme to
pres BDE, ODBCe, DBExpress, IBExpress, ale taky SQLite
proti IB, DB/2 a SQLite.

***

Zatim to celkem vyhovovalo, ale momentalne jsem do toho musel zahrabat a
udelat do interface "diru" v podobe zpristupneni native Database a Query
kvuli TIBTransaction u IBExpress  

***

Jestli se na ty obalky nad DB a Query chces podivat, muzu poslat. Konrektni
potomky tech tabulek ne,
protoze jsou to veci z projektu citliveho na bezpecnost.


HTH, pf